package cn.j229.bug.zhongxuan.eureka_service_ribbon.controller;

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.util.Map;

/**
 * @Author smile_ZhongXuan
 * @Date 2020/10/29 10:41
 * @Version 1.0
 */
@RestController
@RequestMapping("/user")
public class RestTemplateController {
    @Resource
    private RestTemplate restTemplate = null;

    // springcloud默认返回数据是xml格式，springboot是json
    // 如果要用json格式，就需要produces配置
    @RequestMapping(value = "/get",method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public Map show(String name) {

        // 浏览器的缓存存在，避免浏览器缓存的干扰，可以通过pathinfo(?xxx)
        // 当关闭注册中心后，此时ribbon依然存在负载均衡的能力，因为ribbon在内存中进行了缓存
        // 此时关闭其中的某一个业务模块，轮询就失效
        // 注册中心的缓存效果：如果把业务模块关闭，注册中心并不会立刻同步，而是在15分钟之后才会消失（官方：自我保护）

        // 这里调用的是client模块EurekaclientApplication中的show请求路径
        // 需要注意的是EUREKA-CLIENT是server中加载的客户端名字，默认全部大写
        Map forObject = restTemplate.getForObject("http://EUREKA-CLIENT/user/get",Map.class);
        return forObject;
    }
}
